#ifndef HORIZONTALCARDINAL_H_
#define HORIZONTALCARDINAL_H_

#include <vector>

namespace catan
{

class HorizontalCardinal
{
public:
	enum Enum_HorizontalCardinal { HORIZONTAL_CR = 0, HORIZONTAL_TR = 60, HORIZONTAL_TL = 120, HORIZONTAL_CL = 180, HORIZONTAL_BL = 240, HORIZONTAL_BR = 300 };
	
	static const std::vector<Enum_HorizontalCardinal> &getVectorOfPossibleEnumValues();
	static const std::vector<Enum_HorizontalCardinal> &getVectorOfReducedPossibleEnumValues();
	static bool canInit(Enum_HorizontalCardinal enumCardinal);
	
	explicit HorizontalCardinal(Enum_HorizontalCardinal enumCardinal);
	Enum_HorizontalCardinal getEnum() const;
	bool operator==(const HorizontalCardinal &other) const;
	bool operator<(const HorizontalCardinal &other) const;
	HorizontalCardinal& operator=(const HorizontalCardinal& other);
	
private:
	static std::vector<Enum_HorizontalCardinal> vectorOfPossibleEnumValues;
	static std::vector<Enum_HorizontalCardinal> vectorOfReducedPossibleEnumValues;
	
	Enum_HorizontalCardinal enumCardinal;
};

static HorizontalCardinal horizontalCR(HorizontalCardinal::HORIZONTAL_CR), horizontalTR(HorizontalCardinal::HORIZONTAL_TR), horizontalTL(HorizontalCardinal::HORIZONTAL_TL), horizontalCL(HorizontalCardinal::HORIZONTAL_CL), horizontalBL(HorizontalCardinal::HORIZONTAL_BL), horizontalBR(HorizontalCardinal::HORIZONTAL_BR);

}

#endif /*HORIZONTALCARDINAL_H_*/
